#ifndef __LIST_H__
#define __LIST_H__

#include <stdio.h>  // 添加这一行

typedef struct ListNode {
    void *data;
    struct ListNode *next;
} ListNode;

// 基础操作
ListNode* create_node(void *data);
void insert_at_end(ListNode **head, void *data);
void insert_at_begin(ListNode **head, void *data);
void insert_after(ListNode *prev_node, void *data);
void delete_node(ListNode **head, void *target_data, int (*compare)(void*, void*));
void delete_head(ListNode **head);
void delete_tail(ListNode **head);
void free_list(ListNode *head);
void free_list_with_data(ListNode *head, void (*free_data)(void*));

// 查找功能
ListNode* find_node(ListNode *head, void *target_data, int (*compare)(void*, void*));
ListNode* find_by_condition(ListNode *head, int (*condition)(void*));
ListNode* find_at_position(ListNode *head, int position);
ListNode* get_tail(ListNode *head);

// 遍历和工具
void traverse_list(ListNode *head, void (*process)(void*));
int get_list_length(ListNode *head);
int is_list_empty(ListNode *head);
void reverse_list(ListNode **head);
ListNode* copy_list(ListNode *head, void* (*copy_data)(void*));

// 排序
void sort_list(ListNode **head, int (*compare)(void*, void*));

// 文件操作
void save_list_to_file(ListNode *head, const char *filename, void (*save_data)(void*, FILE*));
ListNode* load_list_from_file(const char *filename, void* (*load_data)(FILE*));

#endif // __LIST_H__